package pers.vic.generator.renren.model;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

/**
 * 列的扩展 
 * 根据标准的备注生成
 * 备注标准如：说明,类型,下拉框键值对,其他 (英文逗号分隔)
 * @author VIC
 *
 */
public class ColumnExtend {
	/* ****************************************************************/
    
    /*
     * 说明;类型;下拉框键值对;是否查询条件;
     *  一、列表页是否展示
     *  
     * 1.普通的input 默认都必填 检验规则 ：数字、整数
     * 2.图标
     * 3.图片  列表页不展示
     * 4.富文本  列表页不展示
     * 5.下拉框   下拉框的键值
     * 6.日期
     */
    
    /* ****************************************************************/

	//说明 
	private String comment;;
	//类型 1-普通文本,2-图标,3-图片,4-富文本 5-下拉框,6-日期
	private Integer type = 1;
	//列表页是否展示
	private Boolean show = true;
	//是否是时间
	private Boolean isTime = false;
	
	//是否是图片
	private Boolean isPic = false;
	
	//是否是查询条件
	private Boolean where = false;
	
	//下拉框数据
	private Map<String, String> select = new HashMap<String, String>();
	
	public ColumnExtend(){
		
	}
	
	/**
	 * 根据列的备注生成扩展信息.<br />
	 * 备注标准如：说明;类型;拉框键值对;是否where条件;
	 * 
	 */
	public static ColumnExtend initExtends(ColumnEntity column){
		String comments = column.getComments();
		ColumnExtend extend = new ColumnExtend();
		if(StringUtils.isNotEmpty(comments)){
			String[] arrs = comments.split(";");
			int length = arrs.length;
			for(int i=0; i<length; i++){
				String value = arrs[i];
				switch (i) {
				case 0://说明
					extend.setComment(value);
					column.setComment(value);
					break;
				case 1://类型 1-普通文本,2-图标 3-图片 4-富文本 5-下拉框 6-日期
					try{
						extend.setType(Integer.valueOf(value));
					}catch (Exception e) {
						extend.setType(1);
					}
					break;
				case 2://下拉框键值对形如 1-xx,2-yy,3-zz
					Map<String, String> select = findSelect(value);
					extend.setSelect(select);
					break;
				case 3://是否是where条件
					extend.setWhere("1".equals(value));
					break;
				default:
					break;
				}
			}
		}
		//图文和多图不在列表页面展示
		extend.setShow(extend.getType() != 3 && extend.getType() != 4);
		extend.setIsTime(findIsTime(column.getAttrType()) || extend.getType() == 6);
		extend.setIsPic(extend.getType() == 2 || extend.getType() == 3 ||extend.getType() == 4);
		column.setExtend(extend);
		return extend;
	}
	
	/**
	 * 当前列是不是时间格式
	 */
	private static Boolean findIsTime(String javaType){
		return "Date".equals(javaType);
	}
	
	/**
	 * 下拉框键值对形如 1-xx,2-yy,3-zz
	 */
	private static Map<String, String> findSelect(String value) {
		Map<String, String> selectMap = new HashMap<String, String>();
		selectMap.put("", "--请选择--");
		if(StringUtils.isNotBlank(value)){
			String[] selects = value.split(",");
			for(String select : selects) {
				if(StringUtils.isNoneBlank(select) && select.split("-").length == 2){
					selectMap.put(select.split("-")[0], select.split("-")[1]);
				}
			}
		}
		return selectMap;
	}

	public String getComment() {
		return comment;
	}

	public void setComment(String comment) {
		this.comment = comment;
	}

	public Integer getType() {
		return type;
	}

	public void setType(Integer type) {
		this.type = type;
	}

	public Boolean getShow() {
		return show;
	}

	public void setShow(Boolean show) {
		this.show = show;
	}

	public Map<String, String> getSelect() {
		return select;
	}

	public void setSelect(Map<String, String> select) {
		this.select = select;
	}

	public Boolean getIsTime() {
		return isTime;
	}

	public void setIsTime(Boolean isTime) {
		this.isTime = isTime;
	}

	public Boolean getIsPic() {
		return isPic;
	}

	public void setIsPic(Boolean isPic) {
		this.isPic = isPic;
	}

	public Boolean getWhere() {
		return where;
	}

	public void setWhere(Boolean where) {
		this.where = where;
	}
	
	
	public static void main(String[] args) {
	}
	
	

}
